# coding:utf-8
# @Time : 2021/4/28 16:10
# @File : __init__.py.py
"""
    创建应用程序，并注册蓝图
"""

from flask import Flask
from flask_APIAuth import ApiAuth
from flask_cors import CORS
from flask_login import LoginManager
from app.models import db
from app.config import ConfigSecure

login_manager = LoginManager()
login_auth = ApiAuth()


def register_web_blueprint(app):
    """
    注册所有蓝图
    :param app: Flask实例
    :return: None
    """
    # 导入语句必须在这里，否则会重复导入登录模块
    from app.web import web
    app.register_blueprint(web)  # 注册网页
    from app.api import api
    app.register_blueprint(api, url_prefix='/api')  # 注册API


def create_app(user_config=None):
    app = Flask(__name__)

    # 设置跨域
    CORS(app, supports_credentials=True)

    # 加载默认配置
    app.config.from_object(ConfigSecure)

    # 注册SQLAlchemy
    db.init_app(app)

    # 注册login模块
    login_manager.init_app(app)
    login_manager.login_view = 'web.login'
    login_manager.login_message = '请先登录或注册'

    # 注册蓝图
    register_web_blueprint(app)

    # 加载自定义配置
    if user_config is not None:
        if isinstance(user_config, dict):
            app.config.update(user_config)
        elif user_config.endswith('.py'):
            app.config.from_pyfile(user_config)

    return app
